package com.internetCafes.spms.web.certificate.dao;

import com.internetCafes.spms.core.annotation.TentantFilter;
import com.internetCafes.spms.core.generic.GenericDao;
import com.internetCafes.spms.web.certificate.entity.CertiTransactionInfo;
import com.internetCafes.spms.web.certificate.vo.CertiTransactionInfoVo;
import com.internetCafes.spms.web.certificate.vo.CollectInfo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

/**
 * 证书借还历史
 *
 * @author Sunny
 */
@Mapper
public interface CertiTransactionInfoMapper extends GenericDao<CertiTransactionInfo, Long> {

    /**
     * 按参数查询出证书流转相关信息以及证书的idType
     *
     * @param params 筛选条件
     * @return 流转记录
     * @author Llz
     */
    List<CertiTransactionInfoVo> selectTransInfoAndIdtypeByParams(Map<String, Object> params);

    /**
     * 通过证书id进行删除遗留数据
     *
     * @param certificateId 证书id
     * @return 删除
     */
    int deleteByCertificateId(Long certificateId);

    /**
     * 获取对应证书的押证借出记录
     *
     * @param certificateIds 证书id
     * @return 接触记录
     * @author Zj
     */
    List<CertiTransactionInfo> getWarrantTransactionRecordByCertificateIds(List<Long> certificateIds);

    /**
     * 批量更新流转记录的流转结束时间
     *
     * @param param 参数
     * @author Zj
     */
    void updateTransactionBatch(Map<String, Object> param);

    /**
     * 根据证书id 获取证书对应人员手下所有证书流转记录
     *
     * @param param 根据证书id
     * @return 证书流转记录
     * @author Zj
     */
    List<CertiTransactionInfoVo> queryEmployTransactionsByParams(Map<String, Object> param);

    /**
     * 插入
     */
    int insert(CertiTransactionInfo certiTransactionInfo);

    /**
     * 批量插入
     */
    int insertBatch(List<CertiTransactionInfo> certiTransactionInfoList);

    /**
     * 选择插入
     */
    int insertSelective(CertiTransactionInfo certiTransactionInfo);

    /**
     * 按主键ID查询
     */
    CertiTransactionInfo selectByPrimaryKey(Long id);

    /**
     * 按主键ID选择更新
     */
    int updateByPrimaryKeySelective(CertiTransactionInfo certiTransactionInfo);

    /**
     * 按主键ID更新
     */
    int updateByPrimaryKey(CertiTransactionInfo certiTransactionInfo);

    /**
     * 按参数查询
     */
    List<CertiTransactionInfo> selectByParams(Map<String, Object> params);

    /**
     * 按参数查询数量
     */
    long countByParams(Map<String, Object> params);

    /**
     * 按主键ID删除
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 按主键ID批量删除
     */
    int deleteBatchByPrimaryKey(List<Long> ids);

    List<CollectInfo> CertiTransactionByJobParams(Map<String, Object> params);

    @TentantFilter(tableAlias = "e")
    List<CertiTransactionInfoVo> selectByJobParams(Map<String, Object> params);

    @TentantFilter(tableAlias = "e")
    long countByJobParams(Map<String, Object> params);
}
